﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using SDT.Model;
using SDT.Lib.Common;
using SDT.Lib.Paging;
using SDT.Admin.ViewModels;
using System.Web.Security;
using SDT.Admin.Properties;
using SDT.Lib.Helpers;
namespace SDT.Admin.Controllers
{
    [RoleHelper(Roles = RoleSystem.Administrator)]
    public class SettingsDefaultController : Controller
    {
        /// <summary>
        /// Created by: VietLv
        /// Created date: 11/08/2011
        /// Description: Manage SettingsDefault
        /// </summary>

        SDTDataContext eDataContext = new SDTDataContext();
        #region GET/Index
        public ActionResult Index(int? page)
        {
            try
            {
                if (!page.HasValue) page = 1;
                string keyword = UserState.getUserStateFromRequest("Tag.Keyword", "Keyword", "").ToString();
                int pageSize = int.Parse(UserState.getUserStateFromRequest("Tags.pageSize", "PageSize", 20).ToString());
                var listsetting = eDataContext.SettingsDefaults
                   .Where(t => (string.IsNullOrEmpty(keyword) ? true :
                                (t.Text.ToString().ToLower().Contains(keyword.ToLower().Trim()))||
                                t.Value.ToString().ToLower().Contains(keyword.ToLower().Trim()))).ToPagedList(page.Value - 1, pageSize);

                return View(new IndexSettingsDefaultViewModel
                {
                    SettingsDefaults = listsetting,
                    Keyword = keyword
                });
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region POST: /SettingsDefault/Create
        public ActionResult Create()
        {
            try
            {
                SettingsEditModel s = new SettingsEditModel();
                s.Keys = Utils.StringToDictionaryIntString(Settings.Default.SystemDefaultValue, ",");
                return View(s);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region POST: /SettingsDefault/Create
        [HttpPost]
        [ValidateInput(false)]
        public ActionResult Create(SettingsEditModel s)
        {
            try
            {
                UpdateModel(s);
                s.SettingsDefault.Value = Request["ddlKey"];
                var obj=eDataContext.SettingsDefaults.Where(e => e.Value == s.SettingsDefault.Value).SingleOrDefault();
                if (obj != null) {
                    ViewData[Messages.MessageInfo] = Messages.ERR_ST_001;
                    return View();
                }   
                eDataContext.SettingsDefaults.InsertOnSubmit(s.SettingsDefault);
                eDataContext.SubmitChanges();
                return RedirectToAction("Index");
            }
            catch (Exception ex)
            {
                ViewData["MessageInfo"] = "Thêm thiết lập mới không thành công. Vui lòng thử lại với dữ liệu khác";
                return View();
            }
        }
        #endregion

        #region GET: /SettingsDefault/Edit
        public ActionResult Edit()
        {
            try
            {
                var vl = Request["key"].ToString();
                var currentTag = eDataContext.SettingsDefaults.Where(e => e.Value == vl).SingleOrDefault();
                SettingsEditModel s = new SettingsEditModel();
                s.SettingsDefault = currentTag;
                s.Keys = Utils.StringToDictionaryIntString(Settings.Default.SystemDefaultValue, ",");
                return View(s);
            }
            catch (Exception ex)
            {
                ViewData[Messages.MessageInfo] = "Không tìm thấy tag hiện tại. Vui lòng thử lại với dữ liệu khác";
                return View();
            }
        }
        #endregion

        #region POST: /SettingsDefault/Edit
        [HttpPost]
        [ValidateInput(false)]
        public ActionResult Edit(SettingsEditModel s)
        {
            try
            {
                UpdateModel(s);
                s.SettingsDefault = eDataContext.SettingsDefaults.Where(e => e.Value == s.SettingsDefault.Value).SingleOrDefault();
                if (s.SettingsDefault != null)
                {
                    UpdateModel(s);
                    eDataContext.SubmitChanges();
                }
                return RedirectToAction("Index");
            }
            catch (Exception ex)
            {
                ViewData["MessageInfo"] = "Sửa thiết lập không thành công";
                return View();
            }
        }
        #endregion

        #region GET: /SettingsDefault/Delete
        public ActionResult Delete()
        {
            try
            {
                var vl = Request["key"].ToString();
                var currentTag = eDataContext.SettingsDefaults.Where(e => e.Value == vl).SingleOrDefault();
                return View(currentTag);
            }
            catch (Exception ex)
            {
                ViewData["MessageInfo"] = "Có lỗi xảy ra bạn không thể xóa được";
                return View();
            }
        }
        #endregion

        #region POST: /SettingsDefault/Delete
        [HttpPost]
        public ActionResult Delete(FormCollection frm)
        {
            try
            {
                var currentTag = eDataContext.SettingsDefaults.Where(ca => ca.Value == Request["Value"]).SingleOrDefault();
                eDataContext.SettingsDefaults.DeleteOnSubmit(currentTag);
                eDataContext.SubmitChanges();
                return RedirectToAction("Index");
            }
            catch (Exception ex)
            {
                ViewData["MessageInfo"] = "Có lỗi xảy ra bạn không thể xóa được";
                return View();
            }
        }
        #endregion

        #region GET: /SettingsDefault/Detail
        public ActionResult Detail(string value)
        {
            try
            {
                var currentTag = eDataContext.SettingsDefaults.Where(ca => ca.Value == value).SingleOrDefault();

                return View(currentTag);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion
    }
}
